// // 基础类型(数字、布尔、字符串、undefined、NaN)
// var n:number=123
// n=456
// console.log(n);

// var bool:boolean=true
// bool=false
// let isClose:boolean= Boolean(true)
// console.log(isClose);

// // any 任意类型（不建议使用any） 
// // 如果满篇都是any，就等同于没有类型约束
// var a:any=123
// a='ssss'

// // 函数中的类型约束
// function sum(b:number,c:number):number{
// 	let m=b+c
// 	return m
// }
// console.log(sum(1,2));

// // 函数不返回任何内容
// function other(b:number):void{
// 	console.log(b);
// }
// console.log(other(1));

// // 可选参数
// function haveLauch(food:string,fruit?:string){
// 	console.log(`午饭吃了${food},水果是${fruit?fruit:'没有的'}`);
// }
// console.log(haveLauch('米饭'));

// // 默认参数
// function haveLauch1(food:string,fruit:string="西瓜"){
// 	console.log(`午饭吃${food},水果是${fruit}`);
// }

// haveLauch1('拉面','苹果')

// // rest剩余参数
// function sum1(b:number,c:number,...arg:number[]):number{
// 	let m = b + c//1.前两个参数相加
// 	arg.forEach((item:number)=>{// 2. 遍历剩余参数
// 		m += item
// 	})
// 	return m
// }
// console.log(sum1(1,2,3,4,5,6,7,8,9));

// // TS中有两种箭头（比较少用，但要认识）
// // 1. 代表类型约束的箭头
// // 2. 箭头函数的箭头

// let add:(b:number,c:number) => number  //类型箭头
// add = (num1,num2) => {  //箭头函数
// 	return num1+num2
// }
// console.log(add(1,2));

// // interface接口   用于键值对、JSON数据的自定义约束
// // 命名使用大驼峰
// interface UserType{
// 	readonly name:string //只读
// 	age:number
// 	skills?:string[]
// 	update?:()=>void
// }
// let user:UserType={
// 	name:'anan',
// 	age:18,
// 	update:()=>{
// 		console.log('调用',user);
// 	}
// }

// // user.score = 100  //会告警
// user.skills = ['太极']
// // user.name = '无忌' //尝试修改只读字段，会告警

// if(user.update){
// 	user.update()
// }

// //动态可索引属性（鸿蒙中使用需要注意）
// // 相对较少使用
// interface DynamicType {
// 	[key:string]:string
// }

// let d:DynamicType = {
// 	'123':'123456',
// 	'a':'true', 
// 	'c':'Hello'
// }
// console.log(d['123'],d.a);

// 使用接口来约定函数   （较少使用）
interface Sum {
	(a:number,b:number):number
}

let sum:Sum = (m,n)=>{
	return m+n
}

//工具1：Partial

interface IPerson {
  name: string;
  age: number;
  score: number;
}
type T = keyof IPerson;
// T 类型为： "name" | "age" | "score"

//工具2：Required
//让可选变必选项
interface IPerson1{
	id?:string
	phone?:number
	cardId?:string
}
//登记完整信息
let p1:Required<IPerson1>={
	id:'qqqq',
	phone:11111111,
	cardId:'sssss'
}
//领奖信息
let info1:IPerson1={
	cardId:'sssss'
}

//工具3
let p3={
	id:'asdfgh',
	phone:122344444,
}